# -*- coding: utf-8 -*-
"""
@Time    : 2024/7/10 10:41 
@Author  : ZhangShenao 
@File    : 1.动态绑定Runnable运行时参数.py 
@Desc    : 使用bind()函数,可以动态绑定Runnable的运行时参数
在Runnable执行invoke()函数时,会将调用invoke()函数时传入的参数,和bind()函数动态绑定的参数,进行合并,作为完整的参数进行调用
"""
import dotenv
from langchain_community.chat_models import ChatZhipuAI
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate

dotenv.load_dotenv()

prompt = ChatPromptTemplate.from_messages([
    ('system', '你是一个功能强大的聊天机器人，请根据用户的提问回答问题'),
    ('human', '{query}')
])

llm = ChatZhipuAI(model='glm-4-air')

parser = StrOutputParser()

chain = (prompt
         | llm.bind(temperature=0.8)  # 动态绑定运行时参数
         | parser)

output = chain.invoke({
    'query': '你好，你是什么模型'
})

print(output)
